{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear regression baseline\n",
    "\n",
    "In this notebook, we will create the linear regression baselines."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import xarray as xr\n",
    "import seaborn as sns\n",
    "import pickle\n",
    "from src.score import *\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from tqdm import tqdm_notebook as tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "sns.set_style('darkgrid')\n",
    "sns.set_context('notebook')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def to_pickle(obj, fn):\n",
    "    with open(fn, 'wb') as f:\n",
    "        pickle.dump(obj, f)\n",
    "def read_pickle(fn):\n",
    "    with open(fn, 'rb') as f:\n",
    "        return pickle.load(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load and prepare data for training\n",
    "\n",
    "First up, we need to load and prepare the data so that we can feed it into our linear regression model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATADIR = '/data/WeatherBench/5.625deg/'\n",
    "PREDDIR = '/data/WeatherBench/baselines/'\n",
    "# DATADIR = '/data/stephan/WeatherBench/5.625deg/'\n",
    "# PREDDIR = '/data/stephan/WeatherBench/baselines/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the entire dataset for the relevant variables\n",
    "z500 = xr.open_mfdataset(f'{DATADIR}geopotential_500/*.nc', combine='by_coords').z\n",
    "t850 = xr.open_mfdataset(f'{DATADIR}temperature_850/*.nc', combine='by_coords').t.drop('level')\n",
    "tp = xr.open_mfdataset(f'{DATADIR}total_precipitation/*.nc', combine='by_coords').tp.rolling(time=6).sum()\n",
    "tp.name = 'tp'\n",
    "t2m = xr.open_mfdataset(f'{DATADIR}2m_temperature/*.nc', combine='by_coords').t2m\n",
    "data = xr.merge([z500, t850, tp, t2m])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the validation subset of the data: 2017 and 2018\n",
    "z500_test = load_test_data(f'{DATADIR}geopotential_500', 'z')\n",
    "t850_test = load_test_data(f'{DATADIR}temperature_850', 't')\n",
    "tp_test = load_test_data(f'{DATADIR}total_precipitation', 'tp').rolling(time=6).sum()\n",
    "tp_test.name = 'tp'\n",
    "t2m_test = load_test_data(f'{DATADIR}2m_temperature', 't2m')\n",
    "test_data = xr.merge([z500_test, t850_test, tp_test, t2m_test])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/rasp/miniconda3/lib/python3.7/site-packages/dask/array/numpy_compat.py:41: RuntimeWarning: invalid value encountered in true_divide\n",
      "  x = np.divide(x1, x2, out)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide data repr</title>\n",
       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "</symbol>\n",
       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide attributes</title>\n",
       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "</symbol>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --xr-background-color: var(--jp-layout-color0, white);\n",
       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
       "}\n",
       "\n",
       ".xr-wrap {\n",
       "  min-width: 300px;\n",
       "  max-width: 700px;\n",
       "}\n",
       "\n",
       ".xr-header {\n",
       "  padding-top: 6px;\n",
       "  padding-bottom: 6px;\n",
       "  margin-bottom: 4px;\n",
       "  border-bottom: solid 1px var(--xr-border-color);\n",
       "}\n",
       "\n",
       ".xr-header > div,\n",
       ".xr-header > ul {\n",
       "  display: inline;\n",
       "  margin-top: 0;\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-obj-type,\n",
       ".xr-array-name {\n",
       "  margin-left: 2px;\n",
       "  margin-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-obj-type {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-sections {\n",
       "  padding-left: 0 !important;\n",
       "  display: grid;\n",
       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
       "}\n",
       "\n",
       ".xr-section-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-section-item input {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-item input + label {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label {\n",
       "  cursor: pointer;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label:hover {\n",
       "  color: var(--xr-font-color0);\n",
       "}\n",
       "\n",
       ".xr-section-summary {\n",
       "  grid-column: 1;\n",
       "  color: var(--xr-font-color2);\n",
       "  font-weight: 500;\n",
       "}\n",
       "\n",
       ".xr-section-summary > span {\n",
       "  display: inline-block;\n",
       "  padding-left: 0.5em;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in + label:before {\n",
       "  display: inline-block;\n",
       "  content: '►';\n",
       "  font-size: 11px;\n",
       "  width: 15px;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label:before {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label:before {\n",
       "  content: '▼';\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label > span {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-summary,\n",
       ".xr-section-inline-details {\n",
       "  padding-top: 4px;\n",
       "  padding-bottom: 4px;\n",
       "}\n",
       "\n",
       ".xr-section-inline-details {\n",
       "  grid-column: 2 / -1;\n",
       "}\n",
       "\n",
       ".xr-section-details {\n",
       "  display: none;\n",
       "  grid-column: 1 / -1;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-array-wrap {\n",
       "  grid-column: 1 / -1;\n",
       "  display: grid;\n",
       "  grid-template-columns: 20px auto;\n",
       "}\n",
       "\n",
       ".xr-array-wrap > label {\n",
       "  grid-column: 1;\n",
       "  vertical-align: top;\n",
       "}\n",
       "\n",
       ".xr-preview {\n",
       "  color: var(--xr-font-color3);\n",
       "}\n",
       "\n",
       ".xr-array-preview,\n",
       ".xr-array-data {\n",
       "  padding: 0 5px !important;\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-array-data,\n",
       ".xr-array-in:checked ~ .xr-array-preview {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-array-in:checked ~ .xr-array-data,\n",
       ".xr-array-preview {\n",
       "  display: inline-block;\n",
       "}\n",
       "\n",
       ".xr-dim-list {\n",
       "  display: inline-block !important;\n",
       "  list-style: none;\n",
       "  padding: 0 !important;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list li {\n",
       "  display: inline-block;\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list:before {\n",
       "  content: '(';\n",
       "}\n",
       "\n",
       ".xr-dim-list:after {\n",
       "  content: ')';\n",
       "}\n",
       "\n",
       ".xr-dim-list li:not(:last-child):after {\n",
       "  content: ',';\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-has-index {\n",
       "  font-weight: bold;\n",
       "}\n",
       "\n",
       ".xr-var-list,\n",
       ".xr-var-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-var-item > div,\n",
       ".xr-var-item label,\n",
       ".xr-var-item > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-even);\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-var-item > .xr-var-name:hover span {\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-var-list > li:nth-child(odd) > div,\n",
       ".xr-var-list > li:nth-child(odd) > label,\n",
       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-odd);\n",
       "}\n",
       "\n",
       ".xr-var-name {\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-var-dims {\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-var-dtype {\n",
       "  grid-column: 3;\n",
       "  text-align: right;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-var-preview {\n",
       "  grid-column: 4;\n",
       "}\n",
       "\n",
       ".xr-var-name,\n",
       ".xr-var-dims,\n",
       ".xr-var-dtype,\n",
       ".xr-preview,\n",
       ".xr-attrs dt {\n",
       "  white-space: nowrap;\n",
       "  overflow: hidden;\n",
       "  text-overflow: ellipsis;\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-var-name:hover,\n",
       ".xr-var-dims:hover,\n",
       ".xr-var-dtype:hover,\n",
       ".xr-attrs dt:hover {\n",
       "  overflow: visible;\n",
       "  width: auto;\n",
       "  z-index: 1;\n",
       "}\n",
       "\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  display: none;\n",
       "  background-color: var(--xr-background-color) !important;\n",
       "  padding-bottom: 5px !important;\n",
       "}\n",
       "\n",
       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
       ".xr-var-data-in:checked ~ .xr-var-data {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".xr-var-data > table {\n",
       "  float: right;\n",
       "}\n",
       "\n",
       ".xr-var-name span,\n",
       ".xr-var-data,\n",
       ".xr-attrs {\n",
       "  padding-left: 25px !important;\n",
       "}\n",
       "\n",
       ".xr-attrs,\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  grid-column: 1 / -1;\n",
       "}\n",
       "\n",
       "dl.xr-attrs {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  display: grid;\n",
       "  grid-template-columns: 125px auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt, dd {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  float: left;\n",
       "  padding-right: 10px;\n",
       "  width: auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt {\n",
       "  font-weight: normal;\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-attrs dt:hover span {\n",
       "  display: inline-block;\n",
       "  background: var(--xr-background-color);\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-attrs dd {\n",
       "  grid-column: 2;\n",
       "  white-space: pre-wrap;\n",
       "  word-break: break-all;\n",
       "}\n",
       "\n",
       ".xr-icon-database,\n",
       ".xr-icon-file-text2 {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "</style><div class='xr-wrap'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'tp'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 14</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-4f966ebc-03e0-4d85-88dc-f936c9c14c60' class='xr-array-in' type='checkbox' ><label for='section-4f966ebc-03e0-4d85-88dc-f936c9c14c60' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>nan nan nan nan nan nan ... nan nan nan nan 0.00057715556 0.0005857459</span></div><pre class='xr-array-data'>array([       nan,        nan,        nan,        nan,        nan,\n",
       "              nan,        nan,        nan,        nan,        nan,\n",
       "              nan,        nan, 0.00057716, 0.00058575], dtype=float32)</pre></div></li><li class='xr-section-item'><input id='section-8b0dd0ed-5296-4ed3-b1f0-c1e3145d904c' class='xr-section-summary-in' type='checkbox'  checked><label for='section-8b0dd0ed-5296-4ed3-b1f0-c1e3145d904c' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1979-01-01 ... 1979-01-01T13:00:00</div><input id='attrs-ed955783-b393-4df8-a1f4-8487b1d5b647' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ed955783-b393-4df8-a1f4-8487b1d5b647' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6477d3a1-5cb4-48e3-9fb0-26f0425c62f1' class='xr-var-data-in' type='checkbox'><label for='data-6477d3a1-5cb4-48e3-9fb0-26f0425c62f1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><pre class='xr-var-data'>array([&#x27;1979-01-01T00:00:00.000000000&#x27;, &#x27;1979-01-01T01:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T02:00:00.000000000&#x27;, &#x27;1979-01-01T03:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T04:00:00.000000000&#x27;, &#x27;1979-01-01T05:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T06:00:00.000000000&#x27;, &#x27;1979-01-01T07:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T08:00:00.000000000&#x27;, &#x27;1979-01-01T09:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T10:00:00.000000000&#x27;, &#x27;1979-01-01T11:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T12:00:00.000000000&#x27;, &#x27;1979-01-01T13:00:00.000000000&#x27;],\n",
       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></li><li class='xr-var-item'><div class='xr-var-name'><span>level</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>500</div><input id='attrs-b4fab458-70c6-4fcb-bae5-d31b2fdc7945' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b4fab458-70c6-4fcb-bae5-d31b2fdc7945' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e44bc412-fcad-4c77-a1eb-26e3d32ef6e8' class='xr-var-data-in' type='checkbox'><label for='data-e44bc412-fcad-4c77-a1eb-26e3d32ef6e8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>millibars</dd><dt><span>long_name :</span></dt><dd>pressure_level</dd></dl></div><pre class='xr-var-data'>array(500, dtype=int32)</pre></li></ul></div></li><li class='xr-section-item'><input id='section-6979bc54-2774-451b-a82e-75f7cdc27457' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-6979bc54-2774-451b-a82e-75f7cdc27457' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
      ],
      "text/plain": [
       "<xarray.DataArray 'tp' (time: 14)>\n",
       "array([       nan,        nan,        nan,        nan,        nan,\n",
       "              nan,        nan,        nan,        nan,        nan,\n",
       "              nan,        nan, 0.00057716, 0.00058575], dtype=float32)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 1979-01-01 ... 1979-01-01T13:00:00\n",
       "    level    int32 500"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The first 7+6 values of tp are missing, so let's just start after that\n",
    "data.tp[:6+7+1].mean(('lat', 'lon')).compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = data.isel(time=slice(7+6, None))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Split into train and test data\n",
    "# Yes, technically we should have a separate validation set but for LR this shouldn't matter.\n",
    "data_train = data.sel(time=slice('1979', '2016'))\n",
    "# data_train = data.sel(time=slice('2016', '2016'))\n",
    "data_test = data.sel(time=slice('2017', '2018'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compute normalization statistics\n",
    "# Let's only take a sample of the time to speed this up.\n",
    "data_mean = data_train.isel(time=slice(0, None, 10000)).mean().load()\n",
    "data_std = data_train.isel(time=slice(0, None, 10000)).std().load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Normalize datasets\n",
    "data_train = (data_train - data_mean) / data_std\n",
    "data_test = (data_test - data_mean) / data_std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32, 64)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_, nlat, nlon = data_train.z.shape; nlat, nlon"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.QuadMesh at 0x7fac023c87f0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_train.z.isel(time=0).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.QuadMesh at 0x7fac001e5f28>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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9w0NDThy5Ihv/1NtctFFF/nqMrq7tcKqb5577rlIS0vDjh07kJeXJ13Dfv364cknn5R+3E9hpcS744472lXAjR49Gi+//HKH4rfZbL5hV7N+Eh0djb59+2Lfvn247LLLAJi3P+M/Z/wcCdB2t3H06NFuqeuKK65AQUEBNmzYgNbWVrS2tuKbb77xTZxSli1bhq+++srwZZZEPB4PmpuboWkavF4vmpubfcMMzc3N2L9/P4QQKCoqwpIlS3DrrbciLi7O9/mmpiZs2bIFN954o67uvXv3orW1FXV1dcjNzUVKSgrGjx9vGMfZZ5+NjIwMrFq1yjck9P3330t3Oc3NzT5pbEtLC5qbm9s9r+nTp2P79u3YvXs3Ghoa8Pzzz2PKlCm+JHX6uWqahubmZmkIygyzz3799dfYvXs3Wlpa0NTUhD/84Q8oKyvz/XhTZsyYgb/85S84ePAgqqursXr1al9but1uTJkyBStXrkRDQwO++OIL/O1vf/MJGihTpkzBgQMHsHXrVjQ3N2PVqlUYNmwYBg8e7DvWq6++iuPHj+P48eN49dVXpes2d+5cvPDCC5bn35G+mZWVhddffx27du3CtGnTfO/fcssteO6553yy5IqKCnzwwQeWxwSAl19+ud0+3l4SKSoqwhdffOHrLy+//DIqKysxatQoANb95IYbbsDq1atRXV2NQ4cO4a233jLs60w3ESy5WCiRn58vJk6cKEaPHi1efvllnZxxzpw54s9//rNv/9/+9reS5Pbjjz8WV111la986NAh8fOf/1yMGzdOXHzxxWLu3Lli79693RrzypUrxdChQ6XXypUrhRBCVFdXi6ysLDFixAhx6aWXimeffVZ4PB7p85s2bRJXXHGF0DRNV/d9990nRo0aJUaNGiUWLVokysrKTGM5evSomDNnjrjwwgvF1VdfrZNs0jiHDh1qWt+7774rJk6cKEaMGCHuuusuUVlZ6dv29ttv6+qi8uf25Khmn925c6eYPn26yMzMFGPHjhXZ2dni888/9312165dIjMzU6rvlVdeEZdccokYOXKkyMnJEc3Nzb5tlZWV4he/+IUYMWKEmDhxonj33Xelz2ZmZopdu3b5yh9//LGYOnWquPDCC8WcOXMkmbSmaSI3N1eMHTtWjB07VuTm5krX7corrxT//Oc/DduSyn+t+mZhYaEYNmyY+PnP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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_train.t.isel(time=0).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
       "<defs>\n",
       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide data repr</title>\n",
       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
       "</symbol>\n",
       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
       "<title>Show/Hide attributes</title>\n",
       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
       "</symbol>\n",
       "</defs>\n",
       "</svg>\n",
       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
       " *\n",
       " */\n",
       "\n",
       ":root {\n",
       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
       "  --xr-background-color: var(--jp-layout-color0, white);\n",
       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
       "}\n",
       "\n",
       ".xr-wrap {\n",
       "  min-width: 300px;\n",
       "  max-width: 700px;\n",
       "}\n",
       "\n",
       ".xr-header {\n",
       "  padding-top: 6px;\n",
       "  padding-bottom: 6px;\n",
       "  margin-bottom: 4px;\n",
       "  border-bottom: solid 1px var(--xr-border-color);\n",
       "}\n",
       "\n",
       ".xr-header > div,\n",
       ".xr-header > ul {\n",
       "  display: inline;\n",
       "  margin-top: 0;\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-obj-type,\n",
       ".xr-array-name {\n",
       "  margin-left: 2px;\n",
       "  margin-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-obj-type {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-sections {\n",
       "  padding-left: 0 !important;\n",
       "  display: grid;\n",
       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
       "}\n",
       "\n",
       ".xr-section-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-section-item input {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-item input + label {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label {\n",
       "  cursor: pointer;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-item input:enabled + label:hover {\n",
       "  color: var(--xr-font-color0);\n",
       "}\n",
       "\n",
       ".xr-section-summary {\n",
       "  grid-column: 1;\n",
       "  color: var(--xr-font-color2);\n",
       "  font-weight: 500;\n",
       "}\n",
       "\n",
       ".xr-section-summary > span {\n",
       "  display: inline-block;\n",
       "  padding-left: 0.5em;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label {\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in + label:before {\n",
       "  display: inline-block;\n",
       "  content: '►';\n",
       "  font-size: 11px;\n",
       "  width: 15px;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:disabled + label:before {\n",
       "  color: var(--xr-disabled-color);\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label:before {\n",
       "  content: '▼';\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked + label > span {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-section-summary,\n",
       ".xr-section-inline-details {\n",
       "  padding-top: 4px;\n",
       "  padding-bottom: 4px;\n",
       "}\n",
       "\n",
       ".xr-section-inline-details {\n",
       "  grid-column: 2 / -1;\n",
       "}\n",
       "\n",
       ".xr-section-details {\n",
       "  display: none;\n",
       "  grid-column: 1 / -1;\n",
       "  margin-bottom: 5px;\n",
       "}\n",
       "\n",
       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-array-wrap {\n",
       "  grid-column: 1 / -1;\n",
       "  display: grid;\n",
       "  grid-template-columns: 20px auto;\n",
       "}\n",
       "\n",
       ".xr-array-wrap > label {\n",
       "  grid-column: 1;\n",
       "  vertical-align: top;\n",
       "}\n",
       "\n",
       ".xr-preview {\n",
       "  color: var(--xr-font-color3);\n",
       "}\n",
       "\n",
       ".xr-array-preview,\n",
       ".xr-array-data {\n",
       "  padding: 0 5px !important;\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-array-data,\n",
       ".xr-array-in:checked ~ .xr-array-preview {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       ".xr-array-in:checked ~ .xr-array-data,\n",
       ".xr-array-preview {\n",
       "  display: inline-block;\n",
       "}\n",
       "\n",
       ".xr-dim-list {\n",
       "  display: inline-block !important;\n",
       "  list-style: none;\n",
       "  padding: 0 !important;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list li {\n",
       "  display: inline-block;\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "}\n",
       "\n",
       ".xr-dim-list:before {\n",
       "  content: '(';\n",
       "}\n",
       "\n",
       ".xr-dim-list:after {\n",
       "  content: ')';\n",
       "}\n",
       "\n",
       ".xr-dim-list li:not(:last-child):after {\n",
       "  content: ',';\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-has-index {\n",
       "  font-weight: bold;\n",
       "}\n",
       "\n",
       ".xr-var-list,\n",
       ".xr-var-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-var-item > div,\n",
       ".xr-var-item label,\n",
       ".xr-var-item > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-even);\n",
       "  margin-bottom: 0;\n",
       "}\n",
       "\n",
       ".xr-var-item > .xr-var-name:hover span {\n",
       "  padding-right: 5px;\n",
       "}\n",
       "\n",
       ".xr-var-list > li:nth-child(odd) > div,\n",
       ".xr-var-list > li:nth-child(odd) > label,\n",
       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
       "  background-color: var(--xr-background-color-row-odd);\n",
       "}\n",
       "\n",
       ".xr-var-name {\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-var-dims {\n",
       "  grid-column: 2;\n",
       "}\n",
       "\n",
       ".xr-var-dtype {\n",
       "  grid-column: 3;\n",
       "  text-align: right;\n",
       "  color: var(--xr-font-color2);\n",
       "}\n",
       "\n",
       ".xr-var-preview {\n",
       "  grid-column: 4;\n",
       "}\n",
       "\n",
       ".xr-var-name,\n",
       ".xr-var-dims,\n",
       ".xr-var-dtype,\n",
       ".xr-preview,\n",
       ".xr-attrs dt {\n",
       "  white-space: nowrap;\n",
       "  overflow: hidden;\n",
       "  text-overflow: ellipsis;\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-var-name:hover,\n",
       ".xr-var-dims:hover,\n",
       ".xr-var-dtype:hover,\n",
       ".xr-attrs dt:hover {\n",
       "  overflow: visible;\n",
       "  width: auto;\n",
       "  z-index: 1;\n",
       "}\n",
       "\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  display: none;\n",
       "  background-color: var(--xr-background-color) !important;\n",
       "  padding-bottom: 5px !important;\n",
       "}\n",
       "\n",
       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
       ".xr-var-data-in:checked ~ .xr-var-data {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       ".xr-var-data > table {\n",
       "  float: right;\n",
       "}\n",
       "\n",
       ".xr-var-name span,\n",
       ".xr-var-data,\n",
       ".xr-attrs {\n",
       "  padding-left: 25px !important;\n",
       "}\n",
       "\n",
       ".xr-attrs,\n",
       ".xr-var-attrs,\n",
       ".xr-var-data {\n",
       "  grid-column: 1 / -1;\n",
       "}\n",
       "\n",
       "dl.xr-attrs {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  display: grid;\n",
       "  grid-template-columns: 125px auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt, dd {\n",
       "  padding: 0;\n",
       "  margin: 0;\n",
       "  float: left;\n",
       "  padding-right: 10px;\n",
       "  width: auto;\n",
       "}\n",
       "\n",
       ".xr-attrs dt {\n",
       "  font-weight: normal;\n",
       "  grid-column: 1;\n",
       "}\n",
       "\n",
       ".xr-attrs dt:hover span {\n",
       "  display: inline-block;\n",
       "  background: var(--xr-background-color);\n",
       "  padding-right: 10px;\n",
       "}\n",
       "\n",
       ".xr-attrs dd {\n",
       "  grid-column: 2;\n",
       "  white-space: pre-wrap;\n",
       "  word-break: break-all;\n",
       "}\n",
       "\n",
       ".xr-icon-database,\n",
       ".xr-icon-file-text2 {\n",
       "  display: inline-block;\n",
       "  vertical-align: middle;\n",
       "  width: 1em;\n",
       "  height: 1.5em !important;\n",
       "  stroke-width: 0;\n",
       "  stroke: currentColor;\n",
       "  fill: currentColor;\n",
       "}\n",
       "</style><div class='xr-wrap'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-b1b64104-c7e5-44bc-94a7-495b2e59dcd1' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-b1b64104-c7e5-44bc-94a7-495b2e59dcd1' class='xr-section-summary'  title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>lat</span>: 32</li><li><span class='xr-has-index'>lon</span>: 64</li><li><span class='xr-has-index'>time</span>: 333107</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-05036eb3-3443-4c73-a197-9cf371a38366' class='xr-section-summary-in' type='checkbox'  checked><label for='section-05036eb3-3443-4c73-a197-9cf371a38366' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1979-01-01T13:00:00 ... 2016-12-31T23:00:00</div><input id='attrs-613d89df-d6e9-4c72-8886-ddbdeb5844c8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-613d89df-d6e9-4c72-8886-ddbdeb5844c8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-22c59216-3ec9-4f04-92fe-a641b4b9ab63' class='xr-var-data-in' type='checkbox'><label for='data-22c59216-3ec9-4f04-92fe-a641b4b9ab63' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><pre class='xr-var-data'>array([&#x27;1979-01-01T13:00:00.000000000&#x27;, &#x27;1979-01-01T14:00:00.000000000&#x27;,\n",
       "       &#x27;1979-01-01T15:00:00.000000000&#x27;, ..., &#x27;2016-12-31T21:00:00.000000000&#x27;,\n",
       "       &#x27;2016-12-31T22:00:00.000000000&#x27;, &#x27;2016-12-31T23:00:00.000000000&#x27;],\n",
       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></li><li class='xr-var-item'><div class='xr-var-name'><span>level</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>500</div><input id='attrs-17026bb7-ad1d-43ff-b23a-b45baa5b608c' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-17026bb7-ad1d-43ff-b23a-b45baa5b608c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-20b889bd-7876-4138-9b2f-8ef12d8292a1' class='xr-var-data-in' type='checkbox'><label for='data-20b889bd-7876-4138-9b2f-8ef12d8292a1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>millibars</dd><dt><span>long_name :</span></dt><dd>pressure_level</dd></dl></div><pre class='xr-var-data'>array(500, dtype=int32)</pre></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 5.625 11.25 ... 348.8 354.4</div><input id='attrs-9411a28e-c65f-4c32-b36b-5014319bfe7f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9411a28e-c65f-4c32-b36b-5014319bfe7f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-710f394c-cd9e-4469-9d8f-cf7c807b0698' class='xr-var-data-in' type='checkbox'><label for='data-710f394c-cd9e-4469-9d8f-cf7c807b0698' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'>array([  0.   ,   5.625,  11.25 ,  16.875,  22.5  ,  28.125,  33.75 ,  39.375,\n",
       "        45.   ,  50.625,  56.25 ,  61.875,  67.5  ,  73.125,  78.75 ,  84.375,\n",
       "        90.   ,  95.625, 101.25 , 106.875, 112.5  , 118.125, 123.75 , 129.375,\n",
       "       135.   , 140.625, 146.25 , 151.875, 157.5  , 163.125, 168.75 , 174.375,\n",
       "       180.   , 185.625, 191.25 , 196.875, 202.5  , 208.125, 213.75 , 219.375,\n",
       "       225.   , 230.625, 236.25 , 241.875, 247.5  , 253.125, 258.75 , 264.375,\n",
       "       270.   , 275.625, 281.25 , 286.875, 292.5  , 298.125, 303.75 , 309.375,\n",
       "       315.   , 320.625, 326.25 , 331.875, 337.5  , 343.125, 348.75 , 354.375])</pre></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-87.19 -81.56 ... 81.56 87.19</div><input id='attrs-8a9b5e41-fef6-43c0-9ac1-d8ee1a569b76' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8a9b5e41-fef6-43c0-9ac1-d8ee1a569b76' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-16f4b4d2-e88c-4737-ab5d-1cea68df21a7' class='xr-var-data-in' type='checkbox'><label for='data-16f4b4d2-e88c-4737-ab5d-1cea68df21a7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'>array([-87.1875, -81.5625, -75.9375, -70.3125, -64.6875, -59.0625, -53.4375,\n",
       "       -47.8125, -42.1875, -36.5625, -30.9375, -25.3125, -19.6875, -14.0625,\n",
       "        -8.4375,  -2.8125,   2.8125,   8.4375,  14.0625,  19.6875,  25.3125,\n",
       "        30.9375,  36.5625,  42.1875,  47.8125,  53.4375,  59.0625,  64.6875,\n",
       "        70.3125,  75.9375,  81.5625,  87.1875])</pre></li></ul></div></li><li class='xr-section-item'><input id='section-ec9592e0-4418-43b0-bf89-493a864a1ff7' class='xr-section-summary-in' type='checkbox'  checked><label for='section-ec9592e0-4418-43b0-bf89-493a864a1ff7' class='xr-section-summary' >Data variables: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>z</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(8747, 32, 64), meta=np.ndarray&gt;</div><input id='attrs-a76e1aca-3e4e-4505-8bea-3ac09b5a8cef' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-a76e1aca-3e4e-4505-8bea-3ac09b5a8cef' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-94b7ebac-bd98-4c22-8d57-6e8beda71f30' class='xr-var-data-in' type='checkbox'><label for='data-94b7ebac-bd98-4c22-8d57-6e8beda71f30' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'><table>\n",
       "<tr>\n",
       "<td>\n",
       "<table>\n",
       "  <thead>\n",
       "    <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr><th> Bytes </th><td> 2.73 GB </td> <td> 71.96 MB </td></tr>\n",
       "    <tr><th> Shape </th><td> (333107, 32, 64) </td> <td> (8784, 32, 64) </td></tr>\n",
       "    <tr><th> Count </th><td> 276 Tasks </td><td> 38 Chunks </td></tr>\n",
       "    <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</td>\n",
       "<td>\n",
       "<svg width=\"156\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"10\" y1=\"25\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"25\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"27\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"29\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"30\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"32\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"34\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"36\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"38\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"40\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"26\" y2=\"42\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"43\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"30\" y2=\"45\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"47\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"49\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"36\" y2=\"51\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"37\" y2=\"53\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"55\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"41\" y2=\"56\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"58\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"45\" y2=\"60\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"62\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"49\" y2=\"64\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"66\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"68\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"69\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"56\" y2=\"71\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"73\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"60\" y2=\"75\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"62\" y2=\"77\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"63\" y2=\"79\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"81\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"67\" y2=\"82\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"84\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"86\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"88\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"75\" y2=\"90\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"92\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"78\" y2=\"94\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 80.588235,70.588235 80.588235,96.000852 10.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"37\" y2=\"1\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"39\" y2=\"3\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"40\" y2=\"5\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"42\" y2=\"7\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"44\" y2=\"9\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"46\" y2=\"11\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"48\" y2=\"13\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"52\" y2=\"16\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"53\" y2=\"18\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"55\" y2=\"20\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"57\" y2=\"22\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"59\" y2=\"24\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"61\" y2=\"26\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"63\" y2=\"27\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"65\" y2=\"29\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"66\" y2=\"31\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"68\" y2=\"33\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"70\" y2=\"35\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"72\" y2=\"37\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"74\" y2=\"39\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"76\" y2=\"40\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"78\" y2=\"42\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"79\" y2=\"44\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"81\" y2=\"46\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"83\" y2=\"48\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"85\" y2=\"50\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"87\" y2=\"52\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"89\" y2=\"53\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"91\" y2=\"55\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"92\" y2=\"57\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"94\" y2=\"59\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"96\" y2=\"61\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"98\" y2=\"63\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"100\" y2=\"65\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"102\" y2=\"66\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"104\" y2=\"68\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"35\" y1=\"0\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 35.412617,0.000000 106.000852,70.588235 80.588235,70.588235\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"80\" y1=\"96\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"106\" y1=\"70\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"80.588235,70.588235 106.000852,70.588235 106.000852,96.000852 80.588235,96.000852\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"93.294544\" y=\"116.000852\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"126.000852\" y=\"83.294544\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,126.000852,83.294544)\">32</text>\n",
       "  <text x=\"35.294118\" y=\"80.706734\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,80.706734)\">333107</text>\n",
       "</svg>\n",
       "</td>\n",
       "</tr>\n",
       "</table></pre></li><li class='xr-var-item'><div class='xr-var-name'><span>t</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(8747, 32, 64), meta=np.ndarray&gt;</div><input id='attrs-8673c129-e495-403f-9ead-988a3bda147e' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8673c129-e495-403f-9ead-988a3bda147e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6d3d625a-dfc6-4ec7-becf-d88ab9e8b6bd' class='xr-var-data-in' type='checkbox'><label for='data-6d3d625a-dfc6-4ec7-becf-d88ab9e8b6bd' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'><table>\n",
       "<tr>\n",
       "<td>\n",
       "<table>\n",
       "  <thead>\n",
       "    <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr><th> Bytes </th><td> 2.73 GB </td> <td> 71.96 MB </td></tr>\n",
       "    <tr><th> Shape </th><td> (333107, 32, 64) </td> <td> (8784, 32, 64) </td></tr>\n",
       "    <tr><th> Count </th><td> 276 Tasks </td><td> 38 Chunks </td></tr>\n",
       "    <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</td>\n",
       "<td>\n",
       "<svg width=\"156\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"10\" y1=\"25\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"25\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"27\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"29\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"30\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"32\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"34\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"36\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"38\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"40\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"26\" y2=\"42\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"43\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"30\" y2=\"45\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"47\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"49\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"36\" y2=\"51\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"37\" y2=\"53\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"55\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"41\" y2=\"56\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"58\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"45\" y2=\"60\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"62\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"49\" y2=\"64\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"66\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"68\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"69\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"56\" y2=\"71\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"73\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"60\" y2=\"75\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"62\" y2=\"77\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"63\" y2=\"79\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"81\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"67\" y2=\"82\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"84\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"86\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"88\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"75\" y2=\"90\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"92\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"78\" y2=\"94\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 80.588235,70.588235 80.588235,96.000852 10.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"37\" y2=\"1\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"39\" y2=\"3\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"40\" y2=\"5\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"42\" y2=\"7\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"44\" y2=\"9\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"46\" y2=\"11\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"48\" y2=\"13\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"52\" y2=\"16\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"53\" y2=\"18\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"55\" y2=\"20\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"57\" y2=\"22\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"59\" y2=\"24\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"61\" y2=\"26\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"63\" y2=\"27\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"65\" y2=\"29\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"66\" y2=\"31\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"68\" y2=\"33\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"70\" y2=\"35\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"72\" y2=\"37\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"74\" y2=\"39\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"76\" y2=\"40\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"78\" y2=\"42\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"79\" y2=\"44\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"81\" y2=\"46\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"83\" y2=\"48\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"85\" y2=\"50\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"87\" y2=\"52\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"89\" y2=\"53\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"91\" y2=\"55\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"92\" y2=\"57\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"94\" y2=\"59\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"96\" y2=\"61\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"98\" y2=\"63\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"100\" y2=\"65\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"102\" y2=\"66\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"104\" y2=\"68\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"35\" y1=\"0\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 35.412617,0.000000 106.000852,70.588235 80.588235,70.588235\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"80\" y1=\"96\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"106\" y1=\"70\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"80.588235,70.588235 106.000852,70.588235 106.000852,96.000852 80.588235,96.000852\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"93.294544\" y=\"116.000852\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"126.000852\" y=\"83.294544\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,126.000852,83.294544)\">32</text>\n",
       "  <text x=\"35.294118\" y=\"80.706734\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,80.706734)\">333107</text>\n",
       "</svg>\n",
       "</td>\n",
       "</tr>\n",
       "</table></pre></li><li class='xr-var-item'><div class='xr-var-name'><span>tp</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(8750, 32, 64), meta=np.ndarray&gt;</div><input id='attrs-fe291d21-37e0-4745-b5ff-efbc2d496be7' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-fe291d21-37e0-4745-b5ff-efbc2d496be7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1a594dc4-dbb5-41db-9e88-8a8b527b6218' class='xr-var-data-in' type='checkbox'><label for='data-1a594dc4-dbb5-41db-9e88-8a8b527b6218' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'><table>\n",
       "<tr>\n",
       "<td>\n",
       "<table>\n",
       "  <thead>\n",
       "    <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr><th> Bytes </th><td> 2.73 GB </td> <td> 71.96 MB </td></tr>\n",
       "    <tr><th> Shape </th><td> (333107, 32, 64) </td> <td> (8784, 32, 64) </td></tr>\n",
       "    <tr><th> Count </th><td> 1734 Tasks </td><td> 38 Chunks </td></tr>\n",
       "    <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</td>\n",
       "<td>\n",
       "<svg width=\"156\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"10\" y1=\"25\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"25\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"27\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"29\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"30\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"32\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"34\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"36\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"38\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"40\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"26\" y2=\"42\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"43\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"30\" y2=\"45\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"47\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"49\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"36\" y2=\"51\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"37\" y2=\"53\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"55\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"41\" y2=\"56\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"58\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"45\" y2=\"60\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"62\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"49\" y2=\"64\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"66\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"68\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"69\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"56\" y2=\"71\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"73\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"60\" y2=\"75\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"62\" y2=\"77\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"63\" y2=\"79\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"81\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"67\" y2=\"82\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"84\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"86\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"88\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"75\" y2=\"90\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"92\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"78\" y2=\"94\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 80.588235,70.588235 80.588235,96.000852 10.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"37\" y2=\"1\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"39\" y2=\"3\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"40\" y2=\"5\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"42\" y2=\"7\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"44\" y2=\"9\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"46\" y2=\"11\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"48\" y2=\"13\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"52\" y2=\"16\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"53\" y2=\"18\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"55\" y2=\"20\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"57\" y2=\"22\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"59\" y2=\"24\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"61\" y2=\"26\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"63\" y2=\"27\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"65\" y2=\"29\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"66\" y2=\"31\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"68\" y2=\"33\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"70\" y2=\"35\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"72\" y2=\"37\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"74\" y2=\"39\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"76\" y2=\"40\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"78\" y2=\"42\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"79\" y2=\"44\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"81\" y2=\"46\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"83\" y2=\"48\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"85\" y2=\"50\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"87\" y2=\"52\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"89\" y2=\"53\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"91\" y2=\"55\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"92\" y2=\"57\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"94\" y2=\"59\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"96\" y2=\"61\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"98\" y2=\"63\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"100\" y2=\"65\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"102\" y2=\"66\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"104\" y2=\"68\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"35\" y1=\"0\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 35.412617,0.000000 106.000852,70.588235 80.588235,70.588235\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"80\" y1=\"96\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"106\" y1=\"70\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"80.588235,70.588235 106.000852,70.588235 106.000852,96.000852 80.588235,96.000852\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"93.294544\" y=\"116.000852\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"126.000852\" y=\"83.294544\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,126.000852,83.294544)\">32</text>\n",
       "  <text x=\"35.294118\" y=\"80.706734\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,80.706734)\">333107</text>\n",
       "</svg>\n",
       "</td>\n",
       "</tr>\n",
       "</table></pre></li><li class='xr-var-item'><div class='xr-var-name'><span>t2m</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(8747, 32, 64), meta=np.ndarray&gt;</div><input id='attrs-92f57333-70dc-4cc3-9980-5161c6373609' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-92f57333-70dc-4cc3-9980-5161c6373609' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9ee1bc66-523d-46e0-abd1-b92c980b70f3' class='xr-var-data-in' type='checkbox'><label for='data-9ee1bc66-523d-46e0-abd1-b92c980b70f3' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><pre class='xr-var-data'><table>\n",
       "<tr>\n",
       "<td>\n",
       "<table>\n",
       "  <thead>\n",
       "    <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr><th> Bytes </th><td> 2.73 GB </td> <td> 71.96 MB </td></tr>\n",
       "    <tr><th> Shape </th><td> (333107, 32, 64) </td> <td> (8784, 32, 64) </td></tr>\n",
       "    <tr><th> Count </th><td> 276 Tasks </td><td> 38 Chunks </td></tr>\n",
       "    <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</td>\n",
       "<td>\n",
       "<svg width=\"156\" height=\"146\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"10\" y1=\"25\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"25\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"27\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"29\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"15\" y2=\"30\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"32\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"34\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"36\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"38\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"40\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"26\" y2=\"42\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"43\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"30\" y2=\"45\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"47\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"34\" y2=\"49\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"36\" y2=\"51\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"37\" y2=\"53\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"55\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"41\" y2=\"56\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"58\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"45\" y2=\"60\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"62\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"49\" y2=\"64\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"66\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"52\" y2=\"68\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"69\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"56\" y2=\"71\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"73\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"60\" y2=\"75\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"62\" y2=\"77\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"63\" y2=\"79\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"81\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"67\" y2=\"82\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"84\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"71\" y2=\"86\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"88\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"75\" y2=\"90\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"92\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"78\" y2=\"94\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 80.588235,70.588235 80.588235,96.000852 10.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"11\" y1=\"1\" x2=\"37\" y2=\"1\" />\n",
       "  <line x1=\"13\" y1=\"3\" x2=\"39\" y2=\"3\" />\n",
       "  <line x1=\"15\" y1=\"5\" x2=\"40\" y2=\"5\" />\n",
       "  <line x1=\"17\" y1=\"7\" x2=\"42\" y2=\"7\" />\n",
       "  <line x1=\"19\" y1=\"9\" x2=\"44\" y2=\"9\" />\n",
       "  <line x1=\"21\" y1=\"11\" x2=\"46\" y2=\"11\" />\n",
       "  <line x1=\"23\" y1=\"13\" x2=\"48\" y2=\"13\" />\n",
       "  <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" />\n",
       "  <line x1=\"26\" y1=\"16\" x2=\"52\" y2=\"16\" />\n",
       "  <line x1=\"28\" y1=\"18\" x2=\"53\" y2=\"18\" />\n",
       "  <line x1=\"30\" y1=\"20\" x2=\"55\" y2=\"20\" />\n",
       "  <line x1=\"32\" y1=\"22\" x2=\"57\" y2=\"22\" />\n",
       "  <line x1=\"34\" y1=\"24\" x2=\"59\" y2=\"24\" />\n",
       "  <line x1=\"36\" y1=\"26\" x2=\"61\" y2=\"26\" />\n",
       "  <line x1=\"37\" y1=\"27\" x2=\"63\" y2=\"27\" />\n",
       "  <line x1=\"39\" y1=\"29\" x2=\"65\" y2=\"29\" />\n",
       "  <line x1=\"41\" y1=\"31\" x2=\"66\" y2=\"31\" />\n",
       "  <line x1=\"43\" y1=\"33\" x2=\"68\" y2=\"33\" />\n",
       "  <line x1=\"45\" y1=\"35\" x2=\"70\" y2=\"35\" />\n",
       "  <line x1=\"47\" y1=\"37\" x2=\"72\" y2=\"37\" />\n",
       "  <line x1=\"49\" y1=\"39\" x2=\"74\" y2=\"39\" />\n",
       "  <line x1=\"50\" y1=\"40\" x2=\"76\" y2=\"40\" />\n",
       "  <line x1=\"52\" y1=\"42\" x2=\"78\" y2=\"42\" />\n",
       "  <line x1=\"54\" y1=\"44\" x2=\"79\" y2=\"44\" />\n",
       "  <line x1=\"56\" y1=\"46\" x2=\"81\" y2=\"46\" />\n",
       "  <line x1=\"58\" y1=\"48\" x2=\"83\" y2=\"48\" />\n",
       "  <line x1=\"60\" y1=\"50\" x2=\"85\" y2=\"50\" />\n",
       "  <line x1=\"62\" y1=\"52\" x2=\"87\" y2=\"52\" />\n",
       "  <line x1=\"63\" y1=\"53\" x2=\"89\" y2=\"53\" />\n",
       "  <line x1=\"65\" y1=\"55\" x2=\"91\" y2=\"55\" />\n",
       "  <line x1=\"67\" y1=\"57\" x2=\"92\" y2=\"57\" />\n",
       "  <line x1=\"69\" y1=\"59\" x2=\"94\" y2=\"59\" />\n",
       "  <line x1=\"71\" y1=\"61\" x2=\"96\" y2=\"61\" />\n",
       "  <line x1=\"73\" y1=\"63\" x2=\"98\" y2=\"63\" />\n",
       "  <line x1=\"75\" y1=\"65\" x2=\"100\" y2=\"65\" />\n",
       "  <line x1=\"76\" y1=\"66\" x2=\"102\" y2=\"66\" />\n",
       "  <line x1=\"78\" y1=\"68\" x2=\"104\" y2=\"68\" />\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"35\" y1=\"0\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"10.000000,0.000000 35.412617,0.000000 106.000852,70.588235 80.588235,70.588235\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"106\" y2=\"70\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"80\" y1=\"96\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"106\" y1=\"70\" x2=\"106\" y2=\"96\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"80.588235,70.588235 106.000852,70.588235 106.000852,96.000852 80.588235,96.000852\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"93.294544\" y=\"116.000852\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"126.000852\" y=\"83.294544\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,126.000852,83.294544)\">32</text>\n",
       "  <text x=\"35.294118\" y=\"80.706734\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,80.706734)\">333107</text>\n",
       "</svg>\n",
       "</td>\n",
       "</tr>\n",
       "</table></pre></li></ul></div></li><li class='xr-section-item'><input id='section-23336198-6f89-46fb-88e1-3f212706cdeb' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-23336198-6f89-46fb-88e1-3f212706cdeb' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
      ],
      "text/plain": [
       "<xarray.Dataset>\n",
       "Dimensions:  (lat: 32, lon: 64, time: 333107)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 1979-01-01T13:00:00 ... 2016-12-31T23:00:00\n",
       "    level    int32 500\n",
       "  * lon      (lon) float64 0.0 5.625 11.25 16.88 ... 337.5 343.1 348.8 354.4\n",
       "  * lat      (lat) float64 -87.19 -81.56 -75.94 -70.31 ... 75.94 81.56 87.19\n",
       "Data variables:\n",
       "    z        (time, lat, lon) float32 dask.array<chunksize=(8747, 32, 64), meta=np.ndarray>\n",
       "    t        (time, lat, lon) float32 dask.array<chunksize=(8747, 32, 64), meta=np.ndarray>\n",
       "    tp       (time, lat, lon) float32 dask.array<chunksize=(8750, 32, 64), meta=np.ndarray>\n",
       "    t2m      (time, lat, lon) float32 dask.array<chunksize=(8747, 32, 64), meta=np.ndarray>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_training_data(da, lead_time_h, return_valid_time=False):\n",
    "    \"\"\"Function to split input and output by lead time.\"\"\"\n",
    "    X = da.isel(time=slice(0, -lead_time_h))\n",
    "    y = da.isel(time=slice(lead_time_h, None))\n",
    "    valid_time = y.time\n",
    "    if return_valid_time:\n",
    "        return X.values.reshape(-1, nlat*nlon), y.values.reshape(-1, nlat*nlon), valid_time\n",
    "    else:\n",
    "        return X.values.reshape(-1, nlat*nlon), y.values.reshape(-1, nlat*nlon)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train linear regression\n",
    "\n",
    "Now let's train the model. We will use scikit-learn for this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_lr(lead_time_h, input_vars, output_vars, data_subsample=1):\n",
    "    \"\"\"Create data, train a linear regression and return the predictions.\"\"\"\n",
    "    X_train, y_train, X_test, y_test = [], [], [], []\n",
    "    for v in input_vars:\n",
    "        X, y = create_training_data(\n",
    "            data_train[v],\n",
    "            lead_time_h\n",
    "        )\n",
    "        \n",
    "        X_train.append(X)\n",
    "        if v in output_vars: y_train.append(y)\n",
    "        X, y, valid_time = create_training_data(data_test[v], lead_time_h, return_valid_time=True)\n",
    "        X_test.append(X)\n",
    "        if v in output_vars: y_test.append(y)\n",
    "    X_train, y_train, X_test, y_test = [np.concatenate(d, 1) for d in [X_train, y_train, X_test, y_test]]\n",
    "    \n",
    "    X_train = X_train[::data_subsample]\n",
    "    y_train = y_train[::data_subsample]\n",
    "    \n",
    "    lr = LinearRegression(n_jobs=16)\n",
    "    lr.fit(X_train, y_train)\n",
    "    \n",
    "    mse_train = mean_squared_error(y_train, lr.predict(X_train))\n",
    "    mse_test = mean_squared_error(y_test, lr.predict(X_test))\n",
    "    print(f'Train MSE = {mse_train}'); print(f'Test MSE = {mse_test}')\n",
    "    preds = lr.predict(X_test).reshape((-1, len(output_vars), nlat, nlon))\n",
    "    \n",
    "    fcs = []\n",
    "    for i, v in enumerate(output_vars):\n",
    "        fc = xr.DataArray(\n",
    "            preds[:, i] * data_std[v].values + data_mean[v].values, \n",
    "            dims=['time', 'lat', 'lon'],\n",
    "            coords={\n",
    "                'time': valid_time,\n",
    "                'lat': data_train.lat,\n",
    "                'lon': data_train.lon\n",
    "            },\n",
    "            name=v\n",
    "        )\n",
    "        fcs.append(fc)\n",
    "    return xr.merge(fcs), lr   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3 days\n",
    "\n",
    "Here we train a model to directly predict the fields at 3 days lead time. Let's train a model that only predicts z or t and then a combined model. As we can see below, the model trained only on Z500 performs better than the combined model. But the same is not the case for T850. For the paper, we will use the combined model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "experiments = [\n",
    "    [['z'], ['z']],\n",
    "    [['t'], ['t']],\n",
    "    [['z', 't'], ['z', 't']],\n",
    "    [['tp'], ['tp']],\n",
    "    [['z', 't', 'tp'], ['tp']],\n",
    "    [['t2m'], ['t2m']],\n",
    "    [['z', 't', 't2m'], ['t2m']],\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0: Input variables = ['z']; output variables = ['z']\n",
      "Train MSE = 0.047421716153621674\n",
      "Test MSE = 0.05775315687060356\n",
      "z = 693.2920916695729\n",
      "\n",
      "1: Input variables = ['t']; output variables = ['t']\n",
      "Train MSE = 0.04175624996423721\n",
      "Test MSE = 0.05174350365996361\n",
      "t = 3.1919324223228887\n",
      "\n",
      "2: Input variables = ['z', 't']; output variables = ['z', 't']\n",
      "Train MSE = 0.03748195990920067\n",
      "Test MSE = 0.05694284290075302\n",
      "z = 714.9519994330979; t = 3.189890406083949\n",
      "\n",
      "3: Input variables = ['tp']; output variables = ['tp']\n",
      "Train MSE = 0.7977886199951172\n",
      "Test MSE = 1.054569959640503\n",
      "tp = 0.002328788147613836\n",
      "\n",
      "4: Input variables = ['z', 't', 'tp']; output variables = ['tp']\n",
      "Train MSE = 0.688325047492981\n",
      "Test MSE = 1.153645396232605\n",
      "tp = 0.0024336894867771327\n",
      "\n",
      "5: Input variables = ['t2m']; output variables = ['t2m']\n",
      "Train MSE = 0.015489773824810982\n",
      "Test MSE = 0.019752398133277893\n",
      "t2m = 2.3953812203180607\n",
      "\n",
      "6: Input variables = ['z', 't', 't2m']; output variables = ['t2m']\n",
      "Train MSE = 0.011629346758127213\n",
      "Test MSE = 0.021696479991078377\n",
      "t2m = 2.4925357732291906\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Since training the LR on the full data takes up quite a lot of memory \n",
    "# we only take every 5th time step which gives almost the same results (<0.5% difference)\n",
    "data_subsample = 5\n",
    "lead_time = 3*24\n",
    "preds = []\n",
    "models = []\n",
    "for n, (i, o) in enumerate(experiments):\n",
    "    print(f'{n}: Input variables = {i}; output variables = {o}')\n",
    "    p, m = train_lr(lead_time, input_vars=i, output_vars=o, data_subsample=data_subsample)\n",
    "    preds.append(p); models.append(m)\n",
    "    r = compute_weighted_rmse(p, test_data).compute()\n",
    "    print('; '.join([f'{v} = {r[v].values}' for v in r]) + '\\n')\n",
    "    p.to_netcdf(f'{PREDDIR}/lr_3d_{\"_\".join(i)}_{\"_\".join(o)}.nc');\n",
    "    to_pickle(m, f'{PREDDIR}/saved_models/lr_3d_{\"_\".join(i)}_{\"_\".join(o)}.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see the models with just the output variable as input almost always perform better because of overfitting. We could try a regularized regression like ridge of lasso but the point of these models not to be good but rather to provide a solid baseline with as few hyperparameters as possible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0: Input variables = ['z']; output variables = ['z']\n",
      "Train MSE = 0.05985911563038826\n",
      "Test MSE = 0.07377636432647705\n",
      "z = 783.048846860714\n",
      "\n",
      "1: Input variables = ['t']; output variables = ['t']\n",
      "Train MSE = 0.048178404569625854\n",
      "Test MSE = 0.06070050969719887\n",
      "t = 3.439530277035071\n",
      "\n",
      "2: Input variables = ['z', 't']; output variables = ['z', 't']\n",
      "Train MSE = 0.046257924288511276\n",
      "Test MSE = 0.07199461758136749\n",
      "z = 814.6603554764138; t = 3.5229546158256353\n",
      "\n",
      "3: Input variables = ['tp']; output variables = ['tp']\n",
      "Train MSE = 0.803996205329895\n",
      "Test MSE = 1.062649130821228\n",
      "tp = 0.00233752970513597\n",
      "\n",
      "4: Input variables = ['z', 't', 'tp']; output variables = ['tp']\n",
      "Train MSE = 0.6962897777557373\n",
      "Test MSE = 1.172526478767395\n",
      "tp = 0.0024531068049946053\n",
      "\n",
      "5: Input variables = ['t2m']; output variables = ['t2m']\n",
      "Train MSE = 0.018064960837364197\n",
      "Test MSE = 0.023729275912046432\n",
      "t2m = 2.604655216350416\n",
      "\n",
      "6: Input variables = ['z', 't', 't2m']; output variables = ['t2m']\n",
      "Train MSE = 0.013758870773017406\n",
      "Test MSE = 0.02691197767853737\n",
      "t2m = 2.7592573122237964\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Same for 5 days\n",
    "data_subsample = 5\n",
    "lead_time = 5*24\n",
    "preds = []\n",
    "models = []\n",
    "for n, (i, o) in enumerate(experiments):\n",
    "    print(f'{n}: Input variables = {i}; output variables = {o}')\n",
    "    p, m = train_lr(lead_time, input_vars=i, output_vars=o, data_subsample=data_subsample)\n",
    "    preds.append(p); models.append(m)\n",
    "    r = compute_weighted_rmse(p, test_data).compute()\n",
    "    print('; '.join([f'{v} = {r[v].values}' for v in r]) + '\\n')\n",
    "    p.to_netcdf(f'{PREDDIR}/lr_5d_{\"_\".join(i)}_{\"_\".join(o)}.nc');\n",
    "    to_pickle(m, f'{PREDDIR}/saved_models/lr_5d_{\"_\".join(i)}_{\"_\".join(o)}.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Iterative forecast\n",
    "\n",
    "Finally, an iterative forecast. First, we train a model for 6 hours lead time and then construct an iterative forecast up to 120 hours."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_iterative_fc(state, model, lead_time_h=6, max_lead_time_h=5*24):\n",
    "    max_fc_steps = max_lead_time_h // lead_time_h\n",
    "    fcs_z500, fcs_t850 = [], []\n",
    "    for fc_step in tqdm(range(max_fc_steps)):\n",
    "        state = model.predict(state)\n",
    "        fc_z500 = state[:, :nlat*nlon].copy() * data_std.z.values + data_mean.z.values\n",
    "        fc_t850 = state[:, nlat*nlon:].copy() * data_std.t.values + data_mean.t.values\n",
    "        fc_z500 = fc_z500.reshape((-1, nlat, nlon))\n",
    "        fc_t850 = fc_t850.reshape((-1, nlat, nlon))\n",
    "        fcs_z500.append(fc_z500); fcs_t850.append(fc_t850)\n",
    "\n",
    "    return [xr.DataArray(\n",
    "        np.array(fcs), \n",
    "        dims=['lead_time', 'time', 'lat', 'lon'],\n",
    "        coords={\n",
    "            'lead_time': np.arange(lead_time_h, max_lead_time_h + lead_time_h, lead_time_h),\n",
    "            'time': z500_test.time,\n",
    "            'lat': z500_test.lat,\n",
    "            'lon': z500_test.lon\n",
    "        }\n",
    "    ) for fcs in [fcs_z500, fcs_t850]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train MSE = 0.0033889012411236763\n",
      "Test MSE = 0.0042942301370203495\n"
     ]
    }
   ],
   "source": [
    "p, m = train_lr(6, input_vars=['z', 't'], output_vars=['z', 't'], data_subsample=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "to_pickle(m, f'{PREDDIR}/saved_models/lr_6h_z_t_z_t.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/rasp/miniconda3/lib/python3.7/site-packages/sklearn/base.py:318: UserWarning: Trying to unpickle estimator LinearRegression from version 0.22.2.post1 when using version 0.22.1. This might lead to breaking code or invalid results. Use at your own risk.\n",
      "  UserWarning)\n"
     ]
    }
   ],
   "source": [
    "m = read_pickle(f'{PREDDIR}/saved_models/lr_6h_z_t_z_t.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "state = np.concatenate([data_test.z.values.reshape(-1, nlat*nlon), \n",
    "                        data_test.t.values.reshape(-1, nlat*nlon)], 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/rasp/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0\n",
      "Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`\n",
      "  after removing the cwd from sys.path.\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "774e8e0717f2481aa8caa3d30d011dc3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=20.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "fc_z500_6h_iter, fc_t850_6h_iter = create_iterative_fc(state, m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "fc_iter = xr.Dataset({'z': fc_z500_6h_iter, 't': fc_t850_6h_iter})\n",
    "fc_iter.to_netcdf(f'{PREDDIR}/lr_6h_iter.nc');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The End"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
